/////////////////////////////////////////////////////////////////////////
// MIT License
//
// Copyright (c) 2000-2011 OpenNETCF Consulting, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated 
// documentation files (the "Software"), to deal in the Software without restriction, including without limitation 
// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE 
// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  
////////////////////////////////////////////////////////////////////////

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;

namespace OpenNETCF.Windows.Forms.Calendar
{
    /// <summary>
    /// Represents a class that is a static calendar data provider to be used with a BaseCalender derived control
    /// </summary>
    public class StaticCalendarDataProvider: ICalendarDataProvider
    {
        CalendarItemCollection m_items;

        /// <summary>
        /// Default contructor
        /// </summary>
        public StaticCalendarDataProvider()
        {
            m_items = new CalendarItemCollection();
            m_items.ItemListChanged = new ItemListChangedDelegate(OnItemListChanged);
        }

        /// <summary>
        /// Overloaded contructor
        /// </summary>
        /// <param name="items"></param>
        public StaticCalendarDataProvider(ICollection items)
        {
            m_items = new CalendarItemCollection();
            foreach (CalendarItem item in items)
                m_items.Add(item);
            m_items.ItemListChanged = new ItemListChangedDelegate(OnItemListChanged);
        }

        /// <summary>
        /// Adds an item to the collection
        /// </summary>
        /// <param name="item"></param>
        public void Add(CalendarItem item)
        {
            m_items.Add(item);
        }

        /// <summary>
        /// Clears the collection
        /// </summary>
        public void Clear()
        {
            m_items.Clear();
        }

        /// <summary>
        /// Gets the current count of the collection
        /// </summary>
        public int Count { get { return m_items.Count; } }

        /// <summary>
        /// Gets an item in the collection by index
        /// </summary>
        /// <param name="index"></param>
        /// <returns></returns>
        public CalendarItem this[int index] { get { return m_items[index]; } }
        
        #region ICalendarDataProvider Members
        /// <summary>
        /// Gets a range of items depending on the dateTimes parameters
        /// </summary>
        /// <param name="startDate"></param>
        /// <param name="range"></param>
        /// <returns></returns>
        public CalendarItem[] GetItemsForDateRange(DateTime startDate, TimeSpan range)
        {
            return m_items.ToArray();
        }

        /// <summary>
        /// Occurs when an item in the list has changed
        /// </summary>
        public event ItemListChangedDelegate ItemListChanged;

        #endregion

        private void OnItemListChanged()
        {
            if (ItemListChanged != null)
                ItemListChanged();
        }
    }
}
